<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
<!-- 
  promise 是一个构造函数 使用时要实列化 是一种处理异步代码的方法 手段 具体是将异步的代码以同步的流程表达出来  从而避免了回调地狱
  它的设置是同步的 但是（）内的代码是异步的
  （）内的形参有两 resolve reject  第一个代表成功 第二个代表失败
 -->
</body>
<script>
  // console.log(`start`);
  // const pro =new Promise((resolve,reject)=>{ //参数都是函数  
  //   console.log(`请求数据A`);
  //   setTimeout(()=>{
  //     console.log(`请求成功`);
  //   },5000)
  //   //默认promise 是pedding状态
  //   // resolve(`成功`) //调用形参的任意一个都会改变promise 的状态 //promise 有三种状态 pedding resolve rejected  //异步代码待定   fulfilled/resolved代表异步代码执行成功 rejected代表异步代码执行失败
  //   // reject(`失败`) //promise实列状态的改变 并不会影响异步代码的执行
  // })
  // console.log(`pro`,pro);
  // //promise的实列上有两个属性
  // //promiseState：pendding 
  // //promiseResult：undefined
  // console.log(`end`);


  // ------------

  // 完整版promise书写
    const p1 =new Promise((resolve,reject)=>{
      console.log(`开始请求数据`);
      // 模拟Ajax请求
      // try catch 
      //经常会有确定会出错的代码 这是后用try catch 处理 
      // 代码在try中正常写 用catch来捕捉错误的代码
      // 可以一个 thorw err 抛出错误
      try {
        // console.aa();
        // console.log(bb);
        // throw new Error(`网断了`)
        //抛出错误后的代码都不会执行
        setTimeout(()=>{
        console.log(`数据请求成功`);
        // resolve(`success`)
        reject(`defalus`)
        console.log(`执行了码`);
      },3000)
     
      //catch //处理异常
      }catch(e){
        //catch() e是一个对象 
        // 它上面有一个message方法 用来记录错误信息
        // console.log(typeof(e));
        // console.log(e);
        // console.dir(e);
        reject(e.message)
        console.log(e.message);
      }
    })

    console.log(`p1`,p1);

  // -----------
</script>
</html>